package com.decent.ejfadmin.user.service;

import com.decent.ejfadmin.common.bean.*;
import com.decent.ejfadmin.common.enums.SubmitCardApplyEnum;
import com.decent.ejfadmin.common.exception.SupException;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;

/**
 * @author weicx
 * @date 2018/07/19
 */
public interface UserService {
    /**
     * 模糊查询会员id
     *
     * @param userAccountOrName 会员编号或名称
     * @return
     */
    String getUserId(String userAccountOrName);

    /**
     * 检验模糊查询会员id数量
     *
     * @param userid 会员id
     * @return
     */
    Page dealUserid(String userid);

    /**
     * 查询会员信息
     *
     * @param supUser   会员实体
     * @param page      分页组件
     * @param startTime 查询开始时间
     * @param endTime   查询结束时间
     * @param include   0包含，1剔除
     * @param auditType 供卡审核状态
     * @return
     */
    Page getUser(SupUser supUser, Page page, String startTime, String endTime, Integer include, String auditType);

    /**
     * 根据账号查询会员信息
     *
     * @param account 账号
     * @return 会员
     */
    SupUser queryUsersByAccount(String account);

    /**
     * 会员锁定: 锁定后会员无法登陆（密码错误过多解绑）
     *
     * @param account 会员编号
     * @param state   1 锁定 0 解锁
     * @return MessageBean
     */
    MessageBean unLockUser(String account, Integer state);

    /**
     * 查询注册黑名单
     *
     * @param accountOrIp 手机号/ip
     * @param type        类型，Ip/No
     * @return list
     */
    List<HashMap<String, Object>> queryRegisterBlackList(String accountOrIp, String type);

    /**
     * 移除注册黑名单
     *
     * @param data 黑名单信息
     */
    void removeBlackList(String data);

    /**
     * 新增ip黑名单
     *
     * @param ip 黑名单ip
     */
    void createIpBlack(String ip);

    /**
     * 导出IP黑名单信息
     *
     * @param accountOrIp
     * @param type
     * @param response
     */
    void downloadUserInfoList(String accountOrIp, String type, HttpServletResponse response);

    /**
     * 修改会员 支付密码
     *
     * @param account 账号
     * @param payPwd  支付密码
     * @return MessageBean
     */
    MessageBean updatePayPwd(String account, String payPwd);

    /**
     * 查询同一ip注册多少账号
     *
     * @param ip ip
     * @return list
     */
    List<SupUser> queryUserByIp(String ip);

    /**
     * 查询会员信息
     *
     * @param supUser 用户信息
     * @return 返回权限信息
     */
    SupPrivilege queryPrivilege(SupUser supUser);

    /**
     * 修改会员权限
     *
     * @param supPrivilege 会员权限
     * @return MessageBean
     * @throws Exception 登录校验异常
     */
    MessageBean updatePrivilege(SupPrivilege supPrivilege) throws Exception;

    /**
     * 批量修改会员编号状态；接口状态
     *
     * @param userIds   会员id
     * @param status    状态 0：开启 1：关闭
     * @param privilege accountStatus 账号状态  apiState：接口状态
     * @return
     */
    MessageBean updateUserStatus(Long[] userIds, Integer status, String privilege);

    /**
     * 修改会员信息
     *
     * @param supUser 会员
     * @return MessageBean
     */
    MessageBean updateSupUser(SupUser supUser);

    /**
     * 重置登录密码
     *
     * @param userId 会员id
     * @return
     */
    MessageBean resetUserLoginPwd(Long userId);

    /**
     * 新增会员信息
     *
     * @param supUser 会员
     * @return MessageBean
     */
    MessageBean insertSupUser(SupUser supUser);

    /**
     * 根据账号查询会员信息
     *
     * @param userId 会员id
     * @return 会员
     */
    SupUser queryUsersById(Long userId);

    /**
     * 会员IP解锁
     *
     * @param ip 会员ip
     * @return MessageBean
     */
    MessageBean unLockUserIp(String ip);

    /**
     * 会员信息导出
     *
     * @param supUser
     * @param startTime
     * @param endTime
     * @param include
     * @param auditType
     * @param response
     */
    void downLoad(SupUser supUser, String startTime, String endTime, Integer include, String auditType, HttpServletResponse response);

    /**
     * 开启api会员自动异步
     *
     * @param userId 会员id
     * @return
     */
    MessageBean autoAsyn(Long userId);

    /**
     * 修改权益信用分
     *
     * @param userIds
     * @param equityCredit
     * @param remark
     * @return
     * @throws Exception
     */
    MessageBean updateEquityCredit(Long[] userIds, BigDecimal equityCredit, String remark) throws Exception;

    /**
     * 查询权益信用分修改记录
     *
     * @param equityCreditModify 会员实体
     * @param page               分页组件
     * @param startTime          查询开始时间
     * @param endTime            查询结束时间
     * @return
     */
    Page queryEquityCreditModify(EquityCreditModify equityCreditModify, Page page, String startTime, String endTime);

    /**
     * 会员佣金展示状态获取 true 开启 false 关闭
     *
     * @return
     */
    boolean getCommissionStatus();

    /**
     * 闲鱼佣金展示开关 0关闭 1开启
     *
     * @param status
     * @throws SupException
     */
    void updateCommissionStatus(Integer status) throws SupException;

    /**
     * 分页查询会员操作记录
     *
     * @param page   分页组件
     * @param userId 会员id
     * @return page
     */
    Page<SupUserRecord> queryUserRecordPage(Page<SupUserRecord> page, Long userId);

    /**
     * 审核会员供卡申请
     *
     * @param userId 会员id
     * @param apply  审核状态
     * @param remark 备注
     * @return MessageBean
     * @throws Exception 登录校验异常
     */
    MessageBean auditSubmitCardApply(Long userId, SubmitCardApplyEnum apply, String remark) throws Exception;
}
